// 配置路由
import Vue from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter)

import routes from './routes'

// 引入store
import store from '@/store';

// 解决多次点击搜索报错问题
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
    return originalPush.call(this, location).catch(err => err)
}
let router = new VueRouter({
    routes,
    scrollBehavior(to, from, savedPosition) {
        // return 期望滚动到哪个的位置 下面y:0表示跳转到最上面
        return { y: 0 }
    }
})

// 全局前置守卫 在跳转之前进行判断 是否可以跳转
router.beforeEach(async (to, from, next) => {
    // 获取token （如果登录了会有token 没登陆就没有token）
    let token = store.state.user.token
    // 获取用户名
    let name = store.state.user.userInfo.name
    if (token) {
        // 如果登录成功 就不能在进入登录页面 直接跳转到home页面
        if (to.path == '/login') {
            next('/home')
        } else {
            // 去的不是登录页面
            if (name) {
                // 用户名已有
                next()
            } else {
                // 没有用户信息 派发action让仓库储存用户信息再跳转
                try {
                    // 获取信息成功就放行 
                    await store.dispatch("getUserInfo");
                    next()
                } catch (error) {
                    // 如果获取不到信息 说明token已过期 需要重新登录
                    await store.dispatch('userLogout')
                    next('/login')
                }
            }
        }
    } else {
        // 如果未登录 不能跳转到购物车页面 支付相关的页面 个人中心 
        if (to.path.indexOf('/shopcart') != -1 || to.path.indexOf('/pay') != -1 || to.path.indexOf('/center') != -1) {
            next('/login?redirect=' + to.path)
        } else {
            next()
        }
    }
})

export default router